﻿// D. Make It Round.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1759/D


伯兰迪亚发生了通货膨胀，因此商店需要改变商品价格。

商品 n 的当前价格已给出。允许商品涨价 k 次，1≤k≤m，k 为整数。输出该商品最可能的新价格。也就是最后有最多零的价格。

例如，数字 481000 比数字 1000010 更圆（481000 末尾有三个零，而 1000010 末尾只有一个零）。

如果有几种可能的变式，则输出新价格最大的变式。

如果不可能得到更圆的价格，则输出 n⋅m （即最大可能价格）。

输入
第一行包含一个整数 t（1≤t≤104），即测试中的测试用例数。
每个测试用例包含一行。

这一行包含两个整数：n 和 m（1≤n,m≤109）。其中，n 是商品的旧价格，而数字 m 则表示价格 n 的涨幅不能超过 m 倍。

输出
对于每个测试用例，另起一行输出 n⋅k 形式的最圆整数（1≤k≤m，k - 整数）。

如果存在多个可能的变量，则输出新价格（值 n⋅k ）最大的变量。

如果不可能得到更圆整的价格，则输出 n⋅m (即最大可能价格）。


InputCopy
10
6 11
5 43
13 5
4 16
10050 12345
2 6
4 30
25 10
2 81
1 7
OutputCopy
60
200
65
60
120600000
10
100
200
100
7

注释
第一种情况 n=6，m=11。我们不能得到末尾有两个零或更多的数字，因为我们需要把价格提高 50 倍，但 50>m=11. 10 的最大价格倍数为 6⋅10=60。

第二种情况 n=5，m=43。100 的最大价格倍数为 5-40=200。

第三种情况，n=13，m=5。所有可能的新价格都不会以 0 结尾，那么应该输出 n⋅m=65。

在第四种情况下，应将价格提高 15 倍。

在第五种情况下，将价格提高 12000 倍。


10000
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11

*/


#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int T;


void solve() {
	int n, m, cpn;
	cin >> n >> m;
	cpn = n;
	int a2 = 0, a5 = 0;
	while (n % 2 == 0) {n /= 2; a2++;}
	while (n % 5 == 0) {n /= 5; a5++;}
	long long  k = 1;
	if (a2 > a5) {
		int need5 = a2 - a5;
		while (k < m && need5>0) {
			if (k * 5 <= m) {
				k *= 5;
				need5--;
			}
			else {
				break;
			}
		}
	}
	else if (a5 > a2) {
		int need2 = a5 - a2;
		while (k <= m && need2 > 0) {
			if (k * 2 <= m) {
				k *= 2;
				need2--;
			}
			else {
				break;
			}
		}
	}
	while (k * 10 <= m ) { k *= 10;}

	if (k == 1) {
		cout << 1LL * cpn * m << endl;
		return;
	}

	k = 1LL * cpn * k;
	k = 1LL * cpn *m / k * k;

	cout << k << endl;


	return;
}

int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

	return 0;
}

 